The amount of data representing media information, such as a still image and video image, can be extremely large. Further, transmitting digital video information over communication networks can consume large amounts of bandwidth. The cost of transmitting data from one location to another can be a function of number of bits transmitted per second. Typically, higher bit transfer rates are associated with increased cost. Higher bit rates also progressively can progressively add to required storage capacities of memory systems, which can thereby increase storage cost. Thus, at a given quality level, it can be much more cost effective to use fewer bits, as opposed to more bits, to store digital images and videos. It therefore can be desirable to compress media data for recording, transmitting, or storing.
For a typical compression scheme, achieving higher media quality can require that more bits used, which can, in turn, increase cost of transmission and storage. While lower bandwidth traffic may be desired so may higher quality media.
An encoder is a device capable of encoding (e.g., coding), and sometimes also decoding, digital media data. A decoder is a device capable of decoding digital media data. A codec is a device capable of coding and/or decoding digital media data. The term codec is derived from a combination of the terms code and decode, or the terms compress and decompress. A variety of codecs are commercially available. Codec classifications can include, for example, discrete cosine transfer codecs, fractal codecs, and wavelet codecs. An encoder or codec, by encoding the digital media data, can reduce the number of bits required to transmit signals, which can thereby reduce associated transmission costs.
One part of the encoding process typically involves using motion estimation to facilitate encoding of digital media data. In most cases, consecutive video frames in a sequence of video frames will be relatively similar except for the movement of an object(s) within a frame from one video frame to the next video frame. Motion estimation techniques can take advantage of similarities between consecutive video frames to more efficiently encode a video frame. For instance, an encoder, employing a motion estimation technique, can use a previous video frame as a reference when encoding a current video frame. The encoder can generate motion vectors for the current video frame based on the previous video frame, which typically is a reconstructed video frame. The encoder can identify differences between the reference video frame and current video frame, and can code the portions of the current video frame that are different from the reference video frame, without having to code the portions of the current video frame that are unchanged from the reference video frame. This can thereby make the encoding process and decoding process more efficient.
Precise motion estimation in video compression can be desirable to attain desired quality and efficiency of the video encoder. Typically, the more precise the motion estimation, the less complicated residual data can be for encoding of video content, the lower the bit rate, and the better the encoding quality.
However, motion estimation is one of if not the most computing intensive part of the video encoding process. The computational complexity of motion estimation generally can be very high (e.g., up to 30% or 40% of encoding time), which can thereby make motion estimation a primary time-consuming part in a video encoder.